lass Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        //1.先找到最后一个需要复写的数，从前往后找
        //2.处理边界情况
        //3.从后往前复写
    int cur = 0;
    int dest = -1;
    int size = arr.size();
    while (cur < size)
    {
        if (arr[cur])
        {
            dest++;
        }
        else
        {
            dest += 2;
        }
        if(dest >= size-1)
        break;
        cur++;
    }
    if(dest == size)//处理边界情况  处理边界情况就是如果最后一个要拷贝的是0 
    {               //这时候会越界但是你最后一个位置肯定是0这时候就把最后一个位置直接设置为0然后让dest指向上一个要拷贝的位置即可
        arr[size-1] = 0;
        cur--;         
        dest-=2;
    }
    //现在找到了复写的位置 cur就是需要复写的数 dest现在处于最后一个位置
    while (cur >= 0)
    {
        if (arr[cur])
        {
            arr[dest] = arr[cur];
            dest--;
            cur--;
        }
        else {
            arr[dest] = arr[cur];
            dest--;
            arr[dest] = arr[cur];
            dest--;
            cur--;
        }
    }
    }
};
